Computer hardware is becoming increasingly distributed and remote, resulting in networks of computers for solving problems in concert rather than as stand-alone systems. Although such distributed "services" networks generally facilitate problem-solving, they also increase the need for flexibility and functionality in software programs operating on the computers.
An example of a distributed services computer network is a "client-server" system 100 shown in FIG. 1. The system 100 comprises a collection of client nodes 102, e.g., workstations or personal computers, that communicate over a network 104 with various server nodes 106. The servers are typically computers having hardware and software elements that provide a sophisticated set of services, or operations, for use by the client nodes 102 to increase the efficiency of their own operations.
Several types of networks, including local area networks (LANs), may be employed in the client-server system 100. A LAN is a limited area network that typically consists of a transmission medium, such as a coaxial cable or twisted pair, for interconnecting the client and server nodes. Each node is connected to the transmission medium at an address which uniquely identifies the node and which is used to route data from one node to another.
Nodes coupled to the network typically communicate by exchanging discrete "packets" of data according to predefined "protocols". In this context a protocol consists of a set of rules defining how the nodes interact with each other. For example, communication in the client-server system 100 typically takes the form of packet exchanges, wherein the clients 102 send requests to the servers 106, which perform their services and communicate results back to the clients.
In order to reduce design complexity, most networks are organized as a series of hardware and software levels or "layers" within each node. These layers interact to format data for transfer between nodes that are communicating over the network. Specifically, predetermined services are performed on the data as it passes through each layer and the layers communicate with each other by means of the predefined protocols. This layered design permits each layer to offer selected services to other layers using a standardized interface that shields those layers from the details of actual implementation of the services.
In an attempt to standardize network architectures, i.e., the sets of layers and protocols used within a network, a generalized model has been proposed by the International Standards Organization (ISO). The model, called the open systems interconnection (OSI) reference model, addresses the interconnection of systems that are "open" for communication with other systems. The proposed OSI model has seven layers which are termed, in ascending interfacing order, the "physical", "data link", "network", "transport", "session", "presentation" and "application" layers. These layers are arranged to form a protocol "stack" in each node of the network.
FIG. 2 illustrates a block schematic diagram of prior art protocol stacks 225 and 275 used to transmit data between a client node 200 and a server node 250, respectively. The protocol stacks are structured according to the international standards organization OSI seven-layer model, which also standardizes the functions of their constituent layers. Accordingly, only the protocol stack 225 of the client node will be described.
Broadly stated, the physical layer 214 of the OSI model transmits a raw data bit stream over a communication channel 220, while the data link layer 212 manipulates the bit stream and transforms it into a data stream that appears free of transmission errors. This latter task is accomplished by dividing the transmitted data into data frames and transmitting the frames sequentially, accompanied with error correcting mechanisms for detecting or correcting errors. The network layer 210 routes data packets from a source node to a destination node by selecting one of many alternative paths through the physical network. The transport layer 208 accepts the data stream from the session layer 206, apportions it into smaller units (if necessary), passes the smaller units to the network layer 212, and provides appropriate mechanisms to ensure that all the units arrive correctly at the destination.
The session layer 206 establishes "sessions", i.e., connections, between software processes on the source and destination nodes, and transfers data over those connections in an orderly fashion. That is, a session not only allows ordinary data transport between the nodes, but it also provides enhanced services in some applications, such as dialogue control. The presentation layer 204 performs frequently-requested functions relating to the presentation of transmitted data, including encoding of data into standard formats, while the application layer 202 contains a variety of protocols that are commonly needed by programs executing on the nodes, such as remote file access.
As can be seen in FIG. 2, the protocol stacks 225 and 275 are physically connected through the communications channel 220 at the physical layers 214 and 264. Thus, data transmission over a client-server network consists of generating data messages in the application layer 202 of the client node 200 and passing the data messages down through the protocol stack 225, where they are formatted for delivery onto the channel 220 as bits of packets. Those packet bits are transmitted to the protocol stack 275 of the server 250, where they are passed up that stack to the application layer 252. The generation and formation of data are performed by software programs executing on the nodes and, in some cases, hardware present on the nodes. The software programs may be generally categorized into two broad classes: application programs and operating systems. Operating systems are usually specific to a type of computer and consist of a collection of a utility procedures that enable the computer to perform basic operations, such as storing and retrieving information on primary and secondary storage devices, displaying information on an associated video display and, in some cases, performing network operations.
By itself, the operating system generally provides only very basic functions and must be accompanied by an "application" program. The application program interacts with the operating system to provide much higher level functionality and a direct interface with a user of the node. During interactions with the operating system, the application program typically invokes the utility procedures by issuing a series of parameter requests, via standard local procedure calls, to the operating system which then performs the request in accordance with the parameters. For example, the application program may "call" the operating system to store particular data on a computer disk memory or forward the data over the network.
As noted, a significant function of each layer in the OSI model is to provide services to the other layers. Two types of services offered by the layers are "connection-oriented" and "connectionless" network services. In a connection-oriented service, a source node establishes a connection with a destination node and, after sending a message, terminates the connection. The overhead associated with establishing the connection may be unattractive for nodes requiring efficient communication performance. For this latter case, a fully connectionless service is desirable where each transmitted packet carries the full address of its destination through the network.
A remote procedure call (RPC) establishes such a "connectionless session" between a client node and a server node for execution of a specific service. The RPC is typically embedded in software programs to make the remote call appear "local" to the nodes. Client-server communication thus takes the form of procedure calls and the network details are hidden from the application program by placing them in local procedures called "stub" procedures.
FIG. 3 illustrates a typical client-server system 300 wherein the client and server nodes are schematically represented by boxes 305 and 355, respectively. Resident in each node are application programs, represented by boxes 302 and 352, and operating systems, represented by boxes 306 and 356. Interactions between the application programs and operating systems are illustrated schematically by the two-headed arrows 304 and 354. This dual program system is used on many types of computers ranging from mainframes to personal computers.
In order to provide RPC functions, the application programs interact (as shown schematically by arrows 308 and 318) with stub procedure software 310 and 360 by exchanging parameter requests. Each stub procedure, which is generally associated with the operating system, arranges, i.e., "flattens", the parameters into a predetermined message format according to the computer type. An RPC may transfer data or request a server to perform an operation; accordingly, appropriate stub procedures must be specifically designed in each node to invoke, or respond to, such actions.
Transport entities 314 and 364, i.e., the software within the transport layers of the protocol stacks, interact with the stub procedures (as shown schematically by arrows 312 and 362) to receive the messages, format them into packets and pass them over the network channel 315 via network adapters 316 and 366. These adapters incorporate the signal, electrical and mechanical characteristics, and interchange circuits, needed to interface with the network channel 315. The transport entities generally provide reliable, cost-effective data transport between the client and server, independent of the physical network channel.
To implement an RPC system, the application program 302 of the client 305 calls the stub procedure 310 in a well-known way, passing parameters in a manner similar to passing parameters for a conventional procedure call. The client stub procedure 310 flattens the parameters, which are passed to the transport entity 314 for transmission to the server 355 as a data packet. Since the RPC is a connectionless system, the transport entity typically attaches a header to the packet prior to forwarding it to the adapter 316 and onto the channel. When the packet arrives at the server, the adapter 366 passes it to transport entity 364 and onto the server stub procedure 360, which unflattens the parameters. The stub procedure 360 then calls the application program 352 and passes the parameters in a conventional manner.
After completing its work, the application program 352 "returns" in a manner that is conventional for local procedure calls, e.g., by returning a result. The stub procedure 360 flattens the result into a message and passes it to the transport entity 364, where a reply packet is formed and transferred to the client 305 over the channel 315. Upon receiving the reply packet, the transport entity 314 passes it to the client stub procedure 310 for unflattening. Finally, the stub procedure returns the reply parameters to the application program 302.
Clearly, the RPC system is a significant vehicle for providing distributed services in a client-server system. Accordingly, it would be advantageous to be able to use an RPC-like system with application programs and operating systems which use "Object-Oriented Programming (OOP) techniques. As will be understood by those skilled in the art, OOP techniques involve the definition, creation, use and destruction of "objects". These objects are software entities comprising data elements and routines, or functions, which manipulate the data elements. The data and related functions are treated by the software as an entity that can be created, used and deleted as if it were a single item. Together, the data and functions enable objects to model virtually any real-world entity in terms of its characteristics, which can be represented by the data elements, and its behavior, which can be represented by its data manipulation functions. In this way, objects can model concrete things like people and computers, and they can also model abstract concepts like numbers or geometrical designs.
When OOP techniques are used in a client-server system it is convenient for an application which utilizes objects which, in turn, include functions, to be able to utilize those functions as if they were local functions even though the functions may actually be implemented as part of an object that resides in a remote server. In particular, the functions should be implemented in a "connectionless" manner so that their operation is transparent to the operation of the local object. An example of such function calls are "requests" which are made by objects in client application programs to service objects in order to cause the service objects to perform a desired service. In a distributed services network, the service objects may be local to the client node or located on a remote server node. In either case, it is desirable that access to the service take the same form.
Accordingly, it would be convenient if a local service object could satisfy service requests and use remote data simply by invoking a local request function in a local object or attempting to utilize data in a local object. When a request was made to the local function, the request would be forwarded over the client-server network and the result returned in a manner which was transparent to the user. The local request would also be able to use data which was resident on another node as if the data were local. In this manner, the service objects could be "distributed" over the network and yet perform as if they were all local objects.
Therefore, it is an object of the present invention to provide a flexible interface for efficiently implementing reliable client-server system communication in distributed service networks.
It is another object of the present invention to provide an interface for implementing client-server system communication in a manner which is compatible with OOP techniques.
It is another object of the present invention to provide a transparent mechanism by which service requests generated by a local client object can be satisfied either by local or remote service objects.